#include <stdio.h>

int main()
{

    // 宏__FILE__：C语言预定义宏，会被预处理器替换为当前源文件的文件名（包含路径，具体取决于编译时的设置），类型为字符串常量。
    // 输出当前代码所在的源文件路径及名称
    printf("File: %s\n", __FILE__);

    // 宏__LINE__：预定义宏，替换为当前代码行在源文件中的行号，类型为整数。
    // 输出当前printf语句在源文件中的行号。
    printf("Line: %d\n", __LINE__);

    // 宏__DATE__：预定义宏，替换为预处理器运行时的日期字符串，格式为"Mmm dd yyyy"（如"Jan 05 2024"，月份为英文缩写，日期不足两位时前面补空格）。
    // 输出代码编译时的日期。
    printf("Date: %s\n", __DATE__);

    // 宏__TIME__：预定义宏，替换为预处理器运行时的时间字符串，格式为"hh:mm:ss"（如"14:20:30"）。
    // 输出代码编译时的时间。
    printf("Time: %s\n", __TIME__);

    // 标识符__func__：C99标准引入的预定义标识符（非宏，但类似宏效果），表示当前函数的名称，类型为字符串
    // 输出当前函数的名称
    printf("Function: %s\n", __func__);

    // 宏__PRETTY_FUNCTION__：GNU C扩展宏（非C标准），功能类似__func__，但可能包含更详细的函数信息（如C++中的函数签名，C中通常与__func__相同）
    // 在C语言中通常输出当前函数名（与__func__一致），在GNU编译器环境下有效
    printf("Preprocessor: %s\n", __PRETTY_FUNCTION__);

    return 0;
}